package com.cee.enums;

import com.cee.util.EnumUtil;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.util.Locale;

/**
 * 系統枚舉基類..
 *
 */
public interface BaseEnum<E extends Serializable> {
    /**
     * 枚舉代碼.
     */
    String CODE_KEY = "code";

    /**
     * 枚舉顯示值.
     */
    String TEXT_KEY = "text";

    E getCode();

    String getText();

    /**
     * 国际化text
     * @param locale
     * @return
     */
    default String getText(Locale locale) {
        return EnumUtil.getText(this, locale);
    }

    /**
     * 比較輸入的value 是否和枚舉的value 一樣
     * @param code
     * @return
     */
    default Boolean codeEquals(E code) {
        if (code == null) {
            return (getCode() == null);
        }
        if (getCode() instanceof String) {
            return StringUtils.equals((String)getCode(), (String)code);
        } else {
            return code.equals(getCode());
        }
    }

    /**
     * 比較輸入的value 是否和枚舉的value 不同
     * @param code
     * @return
     */
    default Boolean codeNotEquals(E code) {
        return !codeEquals(code);
    }

}
